/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package persistencia;

import Dominio.Calificacion;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.text.ParseException;
import java.util.ArrayList;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;

/**
 *
 * @author Agustin
 */
public class PersistenciaCalificaciones {

    private static PersistenciaCalificaciones instance;

    public static PersistenciaCalificaciones getInstance() {
        if (instance == null) {
            instance = new PersistenciaCalificaciones();
        }
        return instance;
    }

    public ResultSet ejecutarSeleccion(String query) throws SQLException {
        ResultSet rs;
        try {
            Conexion.getInstance().conectar();
            rs = Conexion.getInstance().select(query);
        } catch (Exception e) {
            throw new UnsupportedOperationException(e.toString());
        }
        return rs;
    }

    public Calificacion recorerRS(ResultSet rs) throws SQLException, ParseException {
        Calificacion c1 = new Calificacion();
        try {
            c1.setValor(Integer.parseInt(rs.getObject(3).toString()));
            c1.setComentario(rs.getObject(4).toString());
            c1.setNombre_empresa(rs.getObject(2).toString());
            c1.setRazon_social(rs.getObject(1).toString());
        } catch (Exception e) {
            throw new UnsupportedOperationException(e.toString());
        }
        return c1;
    }

    public List<Calificacion> traerRS(String query) throws ParseException {
        List<Calificacion> calificaciones = new ArrayList<Calificacion>();
        try {
            ResultSet rs = ejecutarSeleccion(query);
            if (rs.next()) {
                calificaciones.add(recorerRS(rs));
                while (rs.next()) {
                    calificaciones.add(recorerRS(rs));
                }
            } else {
                Calificacion c = new Calificacion();
                calificaciones.add(c);
            }
        } catch (SQLException ex) {
            Logger.getLogger(PersistenciaUsuario.class.getName()).log(Level.SEVERE, null, ex);
        }
        return calificaciones;
    }

    public List<Calificacion> selectCalificaciones(String nombre_usuario) throws ParseException, SQLException {
        String query = "select razon_social,nombre,valor,comentario from Empresas inner join (select rut,valor,comentario from  Usuarios_Empresas inner join (select id_empleado,valor,comentario from Calificaciones where id_empleado in (select id_empleado from Usuarios_Empresas  where nombre_usuario='" + nombre_usuario + "' ))  as t1 on  Usuarios_Empresas.id_empleado=t1.id_empleado) as t2 on Empresas.rut=t2.rut";
        return traerRS(query);
    }

    public void insert(String nombre_usuario, int rut, String comentario, int valor) throws ParseException {
        try {
            int id_empleado;
            String query1 = "select id_empleado from Usuarios_Empresas where rut=" + rut + " and nombre_usuario=" + nombre_usuario + "";
            Conexion.getInstance().conectar();
            id_empleado = Integer.parseInt(Conexion.getInstance().select(query1).getObject(0).toString());
            String query = "insert into Calificaciones (id_empleado,comentario,valor) values(" + id_empleado + ",'" + comentario + "'," + valor + ")";
            Conexion.getInstance().conectar();
            Conexion.getInstance().insert(query);
        } catch (SQLException ex) {
            Logger.getLogger(PersistenciaUsuario.class.getName()).log(Level.SEVERE, null, ex);
        }
    }
}
